﻿#pragma once
namespace my_test {
	class Test {
	public:
		Test();
		virtual ~Test() {} // 虚析构函数
		virtual void up_date(float delta_time) {}
		virtual void render() {}
		virtual void imgui_render() {}
	};

	class TestMenu : public Test {
	public:
		TestMenu() = default;
		~TestMenu() {} // 析构函数
		void up_date(float delta_time) override;
		void render() override;
		void imgui_render() override;
		auto& get_tests() { return m_tests; }

		//template<typename Ty>
		void register_test(const std::string& name, const Test& test) {
			printf("register test for %s success\n", name.c_str());
			m_tests.push_back(std::make_pair(false, std::make_pair(name, const_cast<Test*>(&test))));
		} // 模版函数 .h 文件中必须包含 Ty 类声明, 否则无法实例化（外部无法连接）

	private:
		std::vector<std::pair<bool, std::pair<std::string, Test*>>> m_tests;
	};
}
